package com.atguigu.tingshu.album.service;

import com.atguigu.tingshu.model.album.AlbumInfo;
import com.atguigu.tingshu.model.album.BaseCategory3;
import com.atguigu.tingshu.model.album.TrackInfo;
import com.atguigu.tingshu.query.album.AlbumInfoQuery;
import com.atguigu.tingshu.vo.album.AlbumInfoVo;
import com.atguigu.tingshu.vo.album.AlbumListVo;
import com.atguigu.tingshu.vo.album.AlbumStatVo;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

public interface AlbumInfoService extends IService<AlbumInfo> {


    /**
     * 保存专辑信息
     * @param albumInfoVo 专辑信息vo
     */
    void saveAlbumInfo(AlbumInfoVo albumInfoVo);

    /**
     * 分页查询当前用户下的专辑信息
     * @param query 查询参数
     * @return 分页数据
     */
    IPage<AlbumListVo> findUserAlbumPage(IPage<AlbumListVo> albumListVoPage, AlbumInfoQuery query);

    /**
     * 根据专辑id获取对应专辑信息
     * 用于编辑专辑信息时的数据回显
     * @param albumId 专辑id
     * @return 回显信息
     */
    AlbumInfo getAlbumInfo(Long albumId);

    /**
     * 修改专辑信息
     * @param albumInfoVo 修改对象vo
     * @param userId 用户id
     * @param albumId 专辑id
     */
    void updateAlbumInfo(AlbumInfoVo albumInfoVo, Long userId, Long albumId);

    /**
     * 根据指定的专辑id删除专辑信息
     * @param albumId 专辑id
     */
    void removeAlbumInfo(Long albumId);

    /**
     * 查询当前用户名下的所有专辑信息
     * @param userId 用户id
     * @return 专辑信息集合
     */
    List<AlbumInfo> findUserAllAlbumList(Long userId);

    /**
     * [rpc] 根据专辑id获取专辑详情信息【四个维度】
     * @param albumId 专辑id
     * @return 专辑信息
     */
    AlbumStatVo getAlbumStatVoByAlbumId(Long albumId);

    /**
     * [rpc]
     * 根据一级分类id获取对应的前7个三级分类id对象
     * @param category1Id c1Id
     * @return 前七个三级分类id对象
     */
    List<BaseCategory3> getTop7Category3ByCategory1Id(Long category1Id);


    /**
     * [rpc]
     * 获取所有专辑id集合
     * @return 专辑id集合
     */
    List<Long> getAllAlbumIdList();


    /**
     * [rpc]
     * 根据音频id获取音频对象
     * @param trackId 音频id
     * @return 音频对象
     */
    TrackInfo getTrackInfoById(Long trackId);

    /**
     * 根据订单号,修改mysql中的专辑的购买量
     * @param orderNo 订单号
     */
    void listenAlbumStatUpdate(String orderNo);
}
